AWS Glue의 PythonShell에서 Python 3.9가 사용가능하게 되고 바뀐 점이 무엇인지 알아보기
안녕하세요 DA사업본부의 송영진입니다. 2022년 8월 업데이트로 AWS Glue에서 Python Shell에서 Python의 3.9버전을 지원을 시작했습니다. 이러한 지원에서 어떤 부분이 달라졌는지 알아보겠습니다.
사전 로드 라이브러리 지원
Glue의 Python Shell 작업을 생성할 때 3.9버전의 환경에서는 사전 로드 라이브러리를 지원하게 되었습니다. 여기서 고를 수 있는 라이브러리 셋은 분석 시스템을 위한 analytics
와 기본 셋인 none
의 두 가지를 지원하고 있습니다. 앞으로는 analytics
를 선택함으로써 분석에서 자주 쓰이는 대표적인 라이브러리를 명시적으로 도입하지 않고 이용할 수 있게 됩니다.
- none : Python 3.9 표준 라이브러리에서 awscli 및 botocore 전용 실행 환경
- analytics (default) : 상기 이외에 분석용 라이브러리를 포함한 실행 환경
이와 같이 Python Shell의 작업을 생성할 때 기본적으로 체크가 되어있는 옵션이고 체크를 해제하면 none
상태인 작업이 생성되게 됩니다.
라이브러리 셋에 포함되어있는 라이브러리 리스트는 다음과 같습니다.
Python version | Python 3.9 | |
---|---|---|
Library set | analytics (default) | none |
avro | 1.11.0 | . |
awscli | 1.23.5 | 1.23.5 |
awswrangler | 2.15.1 | . |
botocore | 1.23.5 | 1.23.5 |
boto3 | 1.22.5 | . |
elasticsearch | 8.2.0 | . |
numpy | 1.22.3 | . |
pandas | 1.4.2 | . |
psycopg2 | 2.9.3 | . |
pyathena | 2.5.3 | . |
PyMySQL | 1.0.2 | . |
pyodbc | 4.0.32 | . |
pyorc | 0.6.0 | . |
redshift-connector | 2.0.907 | . |
requests | 2.27.1 | . |
scikit-learn | 1.0.2 | . |
scipy | 1.8.0 | . |
SQLAlchemy | 1.4.36 | . |
s3fs | 2022.3.0 | . |
추가 라이브러리 설치
이 기능은 AWS Glue ETL Job(Glue 버전 2.0)의 Python3에서 이미 지원되었습니다. 이번에는 Python Shell의 Python3.9 지원과 함께 추가되었습니다. 그러나 ETL Job과 지정 방법이 약간 다릅니다.
Python Shell은 작업 파라미터인 --additional-python-modules
에 기존 라이브러리의 버전을 변경하거나 새로 추가하려는 라이브러리를 쉼표로 구분하여 지정합니다.
저는 위의 analystic
셋에 있는 pandas와 numpy 라이브러리의 버전을 바꿔서 설치해보겠습니다.
--additional-python-modules
: pandas==1.5.2,numpy==1.24.1
다음과 같은 옵션의 간단한 스크립트를 작성하였습니다.
다음의 로그와 같이 기존에 있던 numpy와 pandas 라이브러리를 삭제하고 새로운 버전이 설치되는 것을 확인하실 수 있습니다.
이와 같이 옵션 하나만으로 pip를 이용해 새로운 라이브러리를 추가하거나 기존 라이브러리의 버전을 바꿀 수 있었습니다. 기존의 3.6에서는 S3에 라이브러리의 whl 파일을 업로드 해놓고 Glue에서 S3에 있는 파일을 로드해야하는 옵션이었는데요, 간단하게 바뀌어서 더욱 편해졌습니다.
마지막으로
기존 Python Shell에서는 라이브러리를 새로 추가하려는 경우 .whl 파일을 만들고 실행할 때 라이브러리를 S3에서 로드해야 했습니다. 예를 들어, MYSQL에 연결하고 싶을 때 기존의 Python 3.6에서는 extra-py-files에 지정된 mysql_connector는 protobuf라는 라이브러리가 필요하기 때문에 Glue 내부에서 자동으로 pip install protobuf가 실행합니다. 그러나 어느 날 갑자기 protobuf의 최신 버전이 Python 버전 3.7 이상을 요구하게 되어 설치가 실패하고 에러가 발생하여 Glue 작업이 종료되는 경우가 있었습니다. 이러한 비극은 Python 3.9로 변경하고 추가 라이브러리 설치를 사용하기 때문에 일어나지 않을 것입니다. 덤으로 Python 3.6은 이미 EOL이 끝났기 때문에 3.9로 마이그레이션 하는 것을 추천합니다.